home *** CD-ROM | disk | FTP | other *** search
/ World of Amiga / World of Amiga.iso / archive / assembly / b-block1.lha / Trackloader2.s < prev   
Text File  |  1980-01-01  |  4KB  |  227 lines

  1. ùúùúÿÙpOÿÙpOÿÙpOÿÙpOÿÙpOÿÙpOÿÙpOÿÙpOÿÙpO    section    main,Code_C
  2. DiskBuf        =    $7b000
  3. Blocksize    =    512
  4.  
  5. j:
  6.     lea    DiskDemo(pc),a0
  7.     move.l    a0,$80
  8.     trap    #0
  9.     rts
  10. DiskDemo:
  11.     movem.l    d0-d7/a0-a6,-(a7)
  12.     lea    $30000,a0
  13.     moveq    #01,d0
  14.     moveq    #01,d1
  15.     bsr    Trackloader
  16.     movem.l    (a7)+,d0-d7/a0-a6
  17.     rte
  18.  
  19. DMA_ReadBytes    =    [($440*11+Gap_len)/2]+2
  20. Drive        =    0
  21. MAX_HeadMoves    =    2
  22. MAX_ReadTries    =    10
  23. WaitBlitt:    Macro
  24. \@1:
  25.     btst    #6,$2(a6)
  26.     bne.s    \@1
  27.     ENDM
  28. Trackloader:
  29.     subq.w    #1,d1
  30.     bmi.s    LT_LoadDone
  31.     bsr.b    LT_MoveHead
  32. LT_LoadLoop:
  33.     moveq    #MAX_HeadMoves,d6
  34.     bra.s    LT_NoHead
  35. LT_HeadRetry:
  36.     bsr.b    LT_MoveHead
  37. LT_NoHead:
  38.     moveq    #MAX_ReadTries,d5
  39. LT_ReadRetry:
  40.     bsr.w    LT_ReadTrack
  41.     bsr.w    BlitDecode
  42.     move.b    (a4),d7
  43.     beq.s    LT_MoreMore
  44.     dbf    d5,LT_ReadRetry
  45.     dbf    d6,LT_HeadRetry
  46.     move.w    #$4444,d7
  47. LT_WasError:
  48.     move    d7,$dff180
  49.     dbf    d7,LT_WasError
  50. LT_MoreMore:
  51.     lea    $1600(a0),a0
  52.     addq.w    #1,d0
  53.     bchg    #2,(a5)
  54.     btst    #0,d0
  55.     bne.s    LT_Load2
  56.     bclr    #1,(a5)
  57.     bclr    #0,(a5)
  58.     nop
  59.     bset    #0,(a5)
  60.     bsr.b    LT_TIME
  61. LT_Load2:
  62.     dbf    d1,LT_LoadLoop
  63.     bsr.b    LT_Leaver
  64. LT_LoadDone:
  65.     movem.l    (a7)+,d0-d7/a0-a6
  66.     rts
  67. ReadError:    dc.w    0
  68. LT_MoveHead:
  69.     lea    $bfd100,a5
  70.     move.b    #$7f,(a5)
  71.     nop
  72.     bclr    #Drive+3,(a5)
  73.     nop
  74. LT_MH0:
  75.     btst    #5,$f01(a5)
  76.     bne.s    LT_MH0
  77. LT_Move2Zero:
  78.     btst    #4,$f01(a5)
  79.     beq.s    LT_HeadAtZero
  80.     bclr    #0,(a5)
  81.     nop
  82.     bset    #0,(a5)
  83.     bsr.b    LT_TIME
  84.     bra.s    LT_Move2Zero
  85. LT_HeadAtZero:
  86.     bset    #2,(a5)
  87.     moveq    #0,d2
  88.     move.b    d0,d2
  89.     lsr.w    #1,d2
  90.     bcc.s    LT_HeadOK
  91.     bclr    #2,(a5)
  92. LT_HeadOK:
  93.     subq.w    #1,d2
  94.     bmi.s    LT_HeadMoved
  95.     bclr    #1,(a5)
  96. LT_MH1:
  97.     bclr    #0,(a5)
  98.     nop
  99.     nop
  100.     bset    #0,(a5)
  101.     bsr.b    LT_TIME
  102.     dbf    d2,LT_MH1
  103. LT_HeadMoved:
  104.     rts
  105. LT_Leaver:
  106.     move.b    #$fd,(a5)
  107.     nop
  108.     bset    #Drive+3,(a5)
  109.     nop
  110.     bset    #0,(a5)
  111.     rts
  112. LT_TIME:
  113.     moveq    #64,d7
  114.     bsr.b    TimeWait
  115.     rts
  116. TimeWait:
  117.     movem.l    d1/d2,-(a7)
  118. TimeWait0:
  119.     move.w    $dff006,d1
  120.     lsr.w    #8,d1
  121. TimeWait1:
  122.     move.w    $dff006,d2
  123.     lsr.w    #8,d2
  124.     cmp.w    d1,d2
  125.     beq.s    TimeWait1
  126.     dbf    d7,TimeWait0
  127.     movem.l    (a7)+,d1/d2
  128.     rts
  129. LT_ReadTrack:
  130.     lea    $dff000,a6
  131.     move.w    #$7f00,$9e(a6)
  132.     move.w    #$8500,$9e(a6)
  133.     move.w    #$4489,$7e(a6)
  134.     move.w    #$8210,$96(a6)
  135. LT_RT0:
  136.     btst    #5,$f01(a5)
  137.     bne.s    LT_RT0
  138.     move.w    #$4000,$24(a6)
  139.     move.l    #DiskBuf,$20(a6)
  140.     move.w    #$8000+DMA_ReadBytes,d2
  141.     move.w    d2,$24(a6)
  142.     move.w    d2,$24(a6)
  143.     move.w    #$2,$9c(a6)
  144. LT_RT1:
  145.     btst    #1,$1f(a6)
  146.     beq.s    LT_RT1
  147.     move.w    #$4000,$24(a6)
  148.     move.w    #$0400,$9e(a6)
  149.     rts
  150. BlitDecode:
  151.     movem.l    d0-d7/a0-a6,-(a7)
  152.     move.l    #$55555555,d4
  153.     lea    $dff000,a6
  154.     lea    DiskBuf,a1
  155.     moveq    #10,d7
  156. Blit_Dec0:
  157.     cmp.w    #$4489,(a1)+
  158.     bne.s    Blit_Dec0
  159.     cmp.w    #$4489,(a1)
  160.     bne.s    Blit_Dec1
  161.     addq.l    #2,a1
  162. Blit_Dec1:
  163.     bsr.b    Blit_CheckBlock
  164.     move.b    d0,(a4)
  165.     bne.s    Blit_Error
  166.     movem.l    (a1),d2/d3
  167.     and.w    d4,d2
  168.     and.w    d4,d3
  169.     add.w    d2,d2
  170.     or.w    d3,d2
  171.     lsr.w    #8,d2
  172.     lsl.w    #8,d2
  173.     add.w    d2,d2
  174.     lea    (a0,d2.w),a2
  175.     lea    56(a1),a1
  176.     bsr.b    Blit_DoBlit
  177.     subq.l    #1,a1
  178.     dbf    d7,Blit_Dec0
  179. Blit_Error:
  180.     movem.l    (a7)+,d0-d7/a0-a6
  181.     rts
  182. Blit_DoBlit:
  183.     WaitBlitt
  184.     move.w    #$8640,$96(a6)
  185.     move.l    #$1dd80002,$40(a6)
  186.     move.l    #$ffffffff,$44(a6)
  187.     moveq    #0,d2
  188.     move.l    d2,$62(a6)
  189.     move.w    d2,$66(a6)
  190.     move.w    d4,$70(a6)
  191.     lea    BlockSize-1(a1),a1
  192.     move.l    a1,$50(a6)
  193.     lea    BlockSize(a1),a1
  194.     move.l    a1,$4c(a6)
  195.     lea    BlockSize-1(a2),a2
  196.     move.l    a2,$54(a6)
  197.     move.w    #$0808,$58(a6)
  198.     rts
  199. Blit_CheckBlock:
  200.     movem.l    d2/d3/a2/a3,-(a7)
  201.     movem.l    48(a1),d2/d3
  202.     and.l    d4,d2
  203.     add.l    d2,d2
  204.     and.l    d4,d3
  205.     or.l    d3,d2
  206.     lea    56(a1),a2
  207.     lea    48(a1),a3
  208.     moveq    #0,d0
  209.     move.l    d0,(a3)
  210.     waitblitt
  211.     move.w    #$8640,$96(a6)
  212.     move.l    a3,$4c(a6)
  213.     move.l    a2,$50(a6)
  214.     move.l    a3,$54(a6)
  215.     move.l    #$0d3c0000,$40(a6)
  216.     move.l    #$FFFFFFFF,$44(a6)
  217.     move.w    #$FFFc,$62(a6)
  218.     move.l    #$0000FFFC,$64(a6)
  219.     move.w    #$4002,$58(a6)
  220.     waitblitt
  221.     move.l    (a3),d0
  222.     and.l    d4,d0
  223.     sub.l    d2,d0
  224.     sne    d0
  225.     movem.l    (a7)+,d2/d3/a2/a3
  226.     rts
  227.